package com.icehand.payment.pay.union;

import lombok.Data;

/**
 * @see https://open.unionpay.com/tjweb/acproduct/APIList?apiservId=448&acpAPIId=275&version=V2.2
 * @author icehand
 */
@Data
public class UnionTradeRequest {
    //------------------------------------以下为必传字段-----------------------
    /**
     * 版本号 5.1.0
     */
    private String version;

    /**
     * 编码方式 UTF-8
     */
    private String encoding;

    /**
     * 产品类型
     */
    private String bizType;
    /**
     * 订单发送时间
     */
    private String txnTime;
    /**
     * 后台通知地址
     */
    private String backUrl;
    /**
     * 交易币种
     */
    private Integer currencyCode;
    /**
     * 交易金额
     */
    private Integer txbAmt;

    /**
     * 交易类型
     */
    private String txnType;

    /**
     * 交易子类
     */
    private String txnSubType;

    /**
     * 接入类型
     */
    private Integer accessType;

    /**
     * 签名
     */
    private String signature;

    /**
     * 签名方法
     * 非对称签名： 01（表示采用RSA签名） HASH表示散列算法 11：支持散列方式验证SHA-256 12：支持散列方式验证SM3
     */
    private String signMethod;

    /**
     * 渠道类型
     */
    private String channelType;

    /**
     *商户代码
     */
    private String merId;

    /**
     * 商户订单号
     * 商户订单号，不能含“-”或“_”;
     *
     * 商户自定义，同一交易日期内不可重复;
     *
     * 商户代码merId、商户订单号orderId、订单发送时间txnTime三要素唯一确定一笔交易。
     */
    private String orderId;

    //------------------------------------以下为按条件必传字段-----------------------
    /**
     * 订单描述
     * 移动支付上送
     */
    private String orderDesc;

    /**
     *二级商户代码
     * 商户类型为平台类商户接入时必须上送
     */
    private String subMerId;

    /**
     * 二级商户简称
     * 商户类型为平台类商户接入时必须上送
     */
    private String subMerAbbr;

    /**
     * 二级商户名称
     * 商户类型为平台类商户接入时必须上送
     */
    private String subMerName;

    /**
     * 发卡机构代码
     * 1、当账号类型为02-存折时需填写
     * 2、在前台类交易时填写默认银行代码，支持直接跳转到网银。银行简码列表参考附录：C.1、C.2， 其中C.2银行列表仅支持借记卡
     */
    private String issInsCode;

    /**
     * 分期付款信息域
     */
    private String instalTransInfo;

    /**
     * 加密证书ID
     */
    private String encryptCertId;

    /**
     * 前台通知地址
     * 前台返回商户结果时使用，前台类交易需上送
     */
    private String frontUrl;

    /**
     * 银行卡验证信息及身份信息
     */
    private String customerInfo;

    /**
     * 有卡交易信息域
     */
    private String cardTransData;
    /**
     * 预付卡通道
     * 预付卡的专享支付页面
     */
    private String accountPayChannel;

    /**
     * 账号
     * 1、 后台类消费交易时上送全卡号或卡号后4位
     * 2、 跨行收单且收单机构收集银行卡信息时上送、
     * 3、前台类交易可通过配置后返回，卡号可选上送
     */
    private String accNo;

    /**
     * 账号类型(卡介质)
     * 	后台类交易且卡号上送； 跨行收单且收单机构收集银行卡信息时上送
     * 	01：银行卡
     * 	02：存折
     * 	03：IC卡
     * 	默认取值：01 取值“03”表示以IC终端发起的IC卡交易，
     * 	IC作为普通银行卡进行支付时，此域填写为“01”
     */
    private String accType;

    /**
     * 证书ID
     */
    private String certId;

    //------------------------------------以下为按可选择上传字段-----------------------

    /**
     * 保留域
     */
    private String reserved;

    /**
     * 持卡人IP
     * 前台交易，有IP防钓鱼要求的商户上送
     */
    private String customerIp;

    /**
     * 订单接收超时时间
     * 1、前台类消费交易时上送 2、认证支付2.0，后台交易时可选
     */
    private String orderTimeout;

    /**
     * 分账域
     */
    private String accSplitData;

    /**
     * 风控信息域
     */
    private String riskRateInfo;
    /**
     * 控制规则
     * 32位01字符串控制位，从左至右第四位取值为1时表示需要强制分期处理
     */
    private String ctrlRule;
    /**
     * 默认支付方式
     */
    private String defaultPayType;
    /**
     * 请求方保留域
     */
    private String reqReserved;
    /**
     * 失败交易前台跳转地址
     * 前台消费交易若商户上送此字段，则在支付失败时，页面跳转至商户该URL（不带交易信息，仅跳转）
     */
    private String frontFailUrl;
    /**
     * 支持支付方式
     * 仅仅pc使用，使用哪种支付方式 由收单机构填写，取值为以下内容的一种或多种，通过逗号（，）分割。取值参考数据字典
     */
    private String supPayType;
    /**
     * 支付超时时间
     * 超过此时间用户支付成功的交易，不通知商户，系统自动退款，大约5个工作日金额返还到用户账户
     */
    private String payTimeout;
    /**
     * 终端号
     */
    private String termId;
    /**
     * 终端信息域
     * 移动支付业务需要上送
     */
    private String userMac;
}
